import axios from "axios";
// import { MessageBox, Message } from "element-ui";
import { ElMessage } from "element-plus";
// 导入Pinia的store实例（假设创建在@/store/index.js）
import { useUserStore } from "@/store/modules/user";
// import { getToken } from "@/utils/auth";
import router from "../router";

// 创建axios实例
const service = axios.create({
  baseURL: process.env.VUE_APP_BASE_API, // 基础URL
  timeout: 20000, // 请求超时时间
});

// 请求拦截器
service.interceptors.request.use(
  (config) => {
    const userStore = useUserStore(); // 获取 Pinia 用户状态
    if (userStore.token) {
      // config.headers.Authorization = `Bearer ${userStore.token}`;
      config.headers.Authorization = userStore.token;
    }
    return config;
  },
  (error) => {
    // 请求初始化错误（如参数错误）
    ElMessage.error("请求参数异常，请检查");
    return Promise.resolve(error || null); // 避免业务层 try/catch
  }
);

// 响应拦截器
service.interceptors.response.use(
  (response) => {
    const res = response.data;
    if (res.code === 401) {
      ElMessage.error("登录已过期，请重新登录");
      router.push({
        path: "/login",
      });
      return Promise.resolve(null);
    }
    if (res.code !== 200) {
      ElMessage({ message: res.msg, type: "warning" });
      return Promise.resolve(res || null);
    }
    return res;
  },
  (error) => {
    // 响应失败：统一捕获错误
    if (error.response) {
      // 有响应状态码（如 404、500）
      switch (error.response.status) {
        case 401: {
          ElMessage.error("登录已过期，请重新登录");
          router.push({ path: "/login" });
          return Promise.resolve({ code: 401 });
        }
        case 404:
          console.error("接口地址不存在，请核对请求路径：", error.config.url);
          // 可添加用户提示（如 ElMessage）
          // ElMessage.error("服务暂未提供该功能，请稍后重试");
          break;
        case 500:
          ElMessage.error("服务器内部错误，请联系管理员");
          break;
        // 其他状态码可按需处理
      }
    } else if (error.request) {
      // 无响应（如网络断开）
      ElMessage.error("网络连接失败，请检查网络");
    }
    // 返回 Promise 拒绝状态，便于后续捕获
    // return Promise.reject(error);
    return Promise.resolve({ code: 401 });
  }
);

export default service;

// // 1. 保存 Axios 内置适配器
// const defaultAdapter = axios.defaults.adapter;

// // 2. 创建 Axios 实例（不变）
// const request = axios.create({
//   baseURL: import.meta.env.VITE_APP_BASE_API,
//   timeout: 5000
// });

// // 3. 自定义适配器：注入 keepalive（核心修改）
// request.defaults.adapter = async (config) => {
//   // 如果请求配置中带有 keepalive: true，则注入该参数
//   if (config.keepalive) {
//     config.keepalive = true;
//   }
//   // 调用内置适配器发送请求
//   return defaultAdapter(config);
// };

// // 请求拦截器（不变，但注意 Token 优先级）
// request.interceptors.request.use(
//   (config) => {
//     // 优先使用 config 中的 token（页面关闭时提前保存的），其次用 getToken()
//     const token = config.data?.token || getToken();
//     if (token) {
//       config.headers.Authorization = `Bearer ${token}`;
//     }
//     return config;
//   },
//   (error) => Promise.reject(error)
// );

// // 响应拦截器（不变）
// request.interceptors.response.use(
//   (response) => response.data,
//   (error) => Promise.reject(error)
// );
